/**
 * 任务ID生成工具类
 */
export class TaskIdGenerator {
  /**
   * 生成大纲任务ID
   * @param bookId 书籍ID
   * @returns 大纲任务ID
   */
  static generateOutlineTaskId(bookId: string): string {
    return `${bookId}_outline`
  }
  
  /**
   * 生成细纲任务ID
   * @param bookId 书籍ID
   * @returns 细纲任务ID
   */
  static generateDetailOutlineTaskId(bookId: string): string {
    return `${bookId}_detail_outline`
  }
  
  /**
   * 生成章节任务ID
   * @param bookId 书籍ID
   * @param chapterNum 章节号
   * @returns 章节任务ID
   */
  static generateChapterTaskId(bookId: string, chapterNum: number): string {
    return `${bookId}_chapter_${chapterNum}`
  }
  
  /**
   * 生成书籍分析任务ID
   * @param bookId 书籍ID
   * @returns 书籍分析任务ID
   */
  static generateBookAnalysisTaskId(bookId: string): string {
    return `${bookId}_analysis`
  }
  
  /**
   * 生成通用任务ID
   * @param taskType 任务类型
   * @param businessId 业务ID
   * @returns 任务ID
   */
  static generateTaskId(taskType: string, businessId: string): string {
    return `${businessId}_${taskType}`
  }
  
  /**
   * 从任务ID中提取书籍ID
   * @param taskId 任务ID
   * @returns 书籍ID
   */
  static extractBookId(taskId: string): string | null {
    const parts = taskId.split('_')
    if (parts.length >= 2) {
      return parts[0]
    }
    return null
  }
  
  /**
   * 从章节任务ID中提取章节号
   * @param taskId 任务ID
   * @returns 章节号
   */
  static extractChapterNumber(taskId: string): number | null {
    const parts = taskId.split('_')
    if (parts.length >= 4 && parts[1] === 'chapter') {
      const chapterNum = parseInt(parts[2], 10)
      return isNaN(chapterNum) ? null : chapterNum
    }
    return null
  }
  
  /**
   * 从任务ID中提取任务类型
   * @param taskId 任务ID
   * @returns 任务类型
   */
  static extractTaskType(taskId: string): string | null {
    const parts = taskId.split('_')
    if (parts.length >= 2) {
      // 检查是否是章节任务
      if (parts[1] === 'chapter') {
        return 'chapter'
      }
      // 否则返回最后一部分作为任务类型
      return parts[parts.length - 1]
    }
    return null
  }
  
  /**
   * 判断是否是大纲任务
   * @param taskId 任务ID
   * @returns 是否是大纲任务
   */
  static isOutlineTask(taskId: string): boolean {
    return taskId.endsWith('_outline')
  }
  
  /**
   * 判断是否是细纲任务
   * @param taskId 任务ID
   * @returns 是否是细纲任务
   */
  static isDetailOutlineTask(taskId: string): boolean {
    return taskId.endsWith('_detail_outline')
  }
  
  /**
   * 判断是否是章节任务
   * @param taskId 任务ID
   * @returns 是否是章节任务
   */
  static isChapterTask(taskId: string): boolean {
    const parts = taskId.split('_')
    return parts.length >= 3 && parts[1] === 'chapter'
  }
  
  /**
   * 判断是否是分析任务
   * @param taskId 任务ID
   * @returns 是否是分析任务
   */
  static isAnalysisTask(taskId: string): boolean {
    return taskId.endsWith('_analysis')
  }
}